package cloud.maque.sso.server.service.impl;

import cloud.maque.auth.model.BaseUserModel;
import cloud.maque.auth.model.LoginResponse;
import cloud.maque.sso.server.conf.MockEnabledCondition;
import cloud.maque.sso.server.service.UserHandle;
import cn.dev33.satoken.stp.SaLoginConfig;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.context.annotation.Conditional;
import org.springframework.stereotype.Service;

import java.util.LinkedHashMap;
import java.util.Map;

@Service
@Conditional(MockEnabledCondition.class)
public class UserMockHandleImpl implements UserHandle {

    /**
     * 密码登录，默认通过Fegin调通Auth服务登录，可配置模拟直接返回
     *
     * @param name
     * @param pwd
     * @return
     */
    public SaResult login(String name, String pwd) {
        if ("sa".equals(name) && "123456".equals(pwd)) {
            StpUtil.login(10001, SaLoginConfig.setExtra("userId", name));
            return SaResult.ok();
        }
        return SaResult.error("账号名或密码错误");
    }

    /**
     * 只检查用户密码是否正确，不登录
     *
     * @param name
     * @param pwd
     * @return
     */
    @Override
    public SaResult checkPass(String name, String pwd) {
        if ("sa".equals(name) && "123456".equals(pwd)) {
            return SaResult.ok();
        }
        return SaResult.error("账号名或密码错误");
    }

    /**
     * 获取用户信息
     *
     * @param userId
     * @return
     */
    @Override
    public BaseUserModel getUserInfo(String userId) {
        // 模拟账号信息 （真实环境需要查询数据库获取信息）
        BaseUserModel userInfo = new BaseUserModel();
        // map.put("userId", loginId);  一般原则下，oauth2-server 不能把 userId 返回给 oauth2-client

        userInfo.setUserName("linxiaolin");
        userInfo.setUserId(userId);
        userInfo.setAvatar("http://xxx.com/1.jpg");
        userInfo.setNickName("林小林");
        userInfo.setAddress("山东省 青岛市 城阳区");

        return userInfo;
    }

    /**
     * 获取用户TOTP密钥
     *
     * @param userId
     */
    @Override
    public String getUserTotpSecret(String userId) {
        return "123456";
    }

    @Override
    public void updateUserTotpSecret(String userId, String secret) {

    }
}
